package high.concurrent.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 购物车VO
 */
@Data
public class CartVO {

    /**
     * 购物项集合
     */
    @JsonProperty("cart_items")
    private List<CartItemVO> cartItems;

    /**
     * 购物车商品总件数
     */
    @JsonProperty("total_num")
    private Integer totalNum;

    /**
     * 购物车商品总价格
     */
    @JsonProperty("total_price")
    private BigDecimal totalPrice;

    /**
     * 实际支付价格
     */
    @JsonProperty("real_pay_price")
    private BigDecimal realPayPrice;

    /**
     * 购物车所有商品总件数
     * @return
     */
    public Integer getTotalNum() {
        // 从购物项把每件商品数量累加
        if(this.cartItems != null){
            int total = cartItems.stream()
                    .mapToInt(CartItemVO::getBuyNum).sum();
            return total;
        }
        return 0;
    }

    /**
     * 购物车所有是商品总价格
     * @return
     */
    public BigDecimal getTotalPrice() {
        BigDecimal amount = new BigDecimal(0);
        // 从购物项把每件商品数量累加
        if(this.cartItems != null){
            for(CartItemVO cartItemVO : cartItems) {
                BigDecimal itemTotalAmount = cartItemVO.getTotalAmount();
                amount = amount.add(itemTotalAmount);
            }
        }
        return amount;
    }

    /**
     * 购物车内商品实际支付的价格
     * @return
     */
    public BigDecimal getRealPayPrice() {
        BigDecimal amount = new BigDecimal(0);
        // 从购物项把每件商品数量累加
        if(this.cartItems != null){
            for(CartItemVO cartItemVO : cartItems) {
                BigDecimal itemTotalAmount = cartItemVO.getTotalAmount();
                amount = amount.add(itemTotalAmount);
            }
        }
        return amount;
    }

    public List<CartItemVO> getCartItems() {
        return cartItems;
    }

    public void setCartItems(List<CartItemVO> cartItems) {
        this.cartItems = cartItems;
    }
}
